<!doctype html>
<html lang="en">

<head>
	<meta charset="utf-8">

	<title>Markdown slide</title>

	<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
	<meta name="author" content="Hakim El Hattab">

	<meta name="apple-mobile-web-app-capable" content="yes">
	<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

	<meta name="viewport" content="width=device-width, initial-scale=1.0">

	<link rel="stylesheet" href="libs/reveal.js/4.1.3/reset.css">
	<link rel="stylesheet" href="libs/reveal.js/4.1.3/reveal.css">

	
	
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">

	  <!-- highlight Theme -->
  	
	  <link rel="stylesheet" href="libs/highlight.js/11.3.1/styles/monokai.min.css">
	
	
		
	<link rel="stylesheet" href="libs/reveal.js/4.1.3/plugin/chalkboard/style.css">
	
	
	
		<link rel="stylesheet" href="libs/reveal.js/4.1.3/plugin/customcontrols/style.css">
	
	<link rel="stylesheet" href="libs/styles/tasklist.css">



  <!-- Revealjs Theme -->
  
  	<link rel="stylesheet" href="libs/reveal.js/4.1.3/theme/beige.css" id="theme">
  
  


  <!-- Revealjs Theme -->
  

 
</head>

<body>
  


  <div class="reveal">

    <!-- Any section element inside of this container is displayed as a slide -->
    <div class="slides">

      


    
        <section >
            
            <style type="text/css">
    p { text-align: left; }
    h2 { text-align: left; }
</style>
<h1>信息搜集技术与隐私保护</h1>
<pre><code>
20190418 

</code></pre>

            </section>
    



    
    <section>
        <section >
            <h1>1. 简介</h1>

            </section>
        
            <section >
                <h2>1.1. 信息搜集的概念</h2>
<ul>
<li>意义：渗透测试中首先要做的重要事项之一</li>
<li>目的：尽可能多的查找关于目标的信息
<ul>
<li>我们掌握的信息越多，渗透成功的机会越大</li>
</ul>
</li>
<li>任务：搜集关于目标机器的一切信息
<ul>
<li>比如IP地址，开放的服务，开放的端口</li>
</ul>
</li>
<li>方法：间接信息搜集 直接信息搜集 社会工程学
<ul>
<li>搜索引擎 扫描技术 社工技术</li>
</ul>
</li>
</ul>

            </section>
        
            <section >
                <h2>1.2. 间接收集</h2>
<ul>
<li>概念：不接触目标
<ul>
<li>无物理连接</li>
<li>不访问目标</li>
</ul>
</li>
<li>方法：使用第三方信息源
<ul>
<li>比如查询whois信息
<ul>
<li>假设我们的目标是一个在线的Web服务，那么通过whois查询可以获得它的ip地址，域名信息，子域信息，服务器位置信息等。</li>
</ul>
</li>
<li>数据窃听与分析
<ul>
<li>只有在特定环境下才可以实现</li>
</ul>
</li>
</ul>
</li>
<li>其他用途：调查取证</li>
</ul>

            </section>
        
            <section >
                <h2>1.3. 直接收集</h2>
<ul>
<li>概念：建立逻辑连接并获取信息</li>
<li>目的：对目标的安全性设置进一步理解</li>
<li>方法：主动扫描技术，探测目标开放的端口和服务。</li>
</ul>

            </section>
        
            <section >
                <h2>1.4. 社会工程学</h2>
<ul>
<li>概念：类似于被动信息收集，主要是针对人为错误，信息以打印输出、电话交谈、电子邮件等形式泄露</li>
<li>目的：获取信息</li>
<li>方法：…
<ul>
<li>收集信息的非常多</li>
<li>社会工程学本身就是一个技术范畴</li>
</ul>
</li>
</ul>

            </section>
        
            <section >
                <ul>
<li>社会工程的受害者被诱骗发布他们没有意识到会被用来攻击企业网络的信息。
<ul>
<li>例如，企业中的员工可能会被骗向假装是她信任的人透露员工的身份号码。尽管该员工编号对员工来说似乎没有价值，这使得他在一开始就更容易泄露信息，但社会工程师可以将该员工编号与收集到的其他信息一起使用，以便更快的找到进入企业网络的方法。</li>
<li>利用新员工愿意工作的积极性</li>
<li>冒充内部人员发邮件让发敏感信息到分部</li>
</ul>
</li>
</ul>

            </section>
        

    </section>
    



    
    <section>
        <section >
            <h1>2. 间接信息收集</h1>
<ul>
<li>目的：
<ul>
<li>从目标公司域名开始收集信息</li>
<li>获取公司有关信息，收集子域名，检测蜜罐、收集电子邮件地址等</li>
</ul>
</li>
<li>方法：使用辅助模块中信息搜集类</li>
</ul>

            </section>
        
            <section >
                <h2>2.1. DNS记录扫描和枚举</h2>
<ul>
<li>从给定的DNS服务器收集有关域名的信息</li>
<li>执行各种DNS查询（如域传送，反向查询，SRV记录等）</li>
</ul>
<pre><code>msf5 &gt; use auxiliary/gather/enum_dns //切换到 enum_dns模块
msf5 auxiliary(gather/enum_dns) &gt; info //查看模块信息
...
Description:
  This module can be used to gather information about a domain from a
  given DNS server by performing various DNS queries such as zone
  transfers, reverse lookups, SRV record brute forcing, and other
  techniques.

References:
  https://cvedetails.com/cve/CVE-1999-0532/
  OSVDB (492)

msf5 auxiliary(gather/enum_dns) &gt;

</code></pre>

            </section>
        
            <section >
                <ul>
<li>更多
<ul>
<li>dns扫描和枚举模块也可以用于主动信息收集，通过爆破的方式，设置ENUM_BRT为true，可以通过字典暴力枚举子域名和主机名。WORDLIST选项可以设置字典文件。</li>
</ul>
</li>
</ul>

            </section>
        
            <section >
                <h2>2.2. CorpWatch</h2>
<ul>
<li>模块名：auxiliary/gather/corpwatch_lookup_name</li>
<li>功能：公司名称信息收集，包括名称，地址，部门和行业信息</li>
<li>使用要求：该模块与CorpWatch API连接，以获取给定公司名称的公开可用信息。
<ul>
<li>API申请：<a href="http://api.corpwatch.org">http://api.corpwatch.org</a></li>
</ul>
</li>
<li>国内天眼查</li>
</ul>

            </section>
        
            <section >
                <h2>2.3. 搜索引擎子域名搜集器</h2>
<ul>
<li>模块名：auxiliary/gather/searchengine_subdomains_collector</li>
<li>功能：从Yahoo和Bing收集域名的子域信息</li>
<li>类比：通过卫星图在不进入校园的情况下拿到校园地图。</li>
</ul>

            </section>
        
            <section >
                <h2>2.4. 在线搜索工具</h2>
<ul>
<li><a href="https://www.exploit-db.com/google-hacking-database/">GHDB</a></li>
<li>设备搜索：需要注册或付费，不同与能用信息搜索引擎
<ul>
<li><a href="https://www.shodan.io/">shodan</a></li>
<li><a href="https://censys.io/">censys</a></li>
<li><a href="https://www.zoomeye.org/">zoomeye</a></li>
</ul>
</li>
<li><a href="http://viewdns.info/">viewdns</a></li>
</ul>

            </section>
        
            <section >
                <h2>2.5. 其他</h2>
<ul>
<li>蜜罐检查</li>
<li>检测目标是否为蜜罐，避免浪费时间或因为试图攻击蜜罐而被封锁。使用Shodan Honeyscore Client模块，可以利用Shodan搜索引擎检测目标是否为蜜罐。结果返回为0到1的评级分数，如果是1，则是一个蜜罐。</li>
<li>邮箱信息收集
<ul>
<li>收集邮箱信息是渗透测试中常见的部分，它可以让我们了解互联网上目标的痕迹，以便用于后续的暴力攻击以及网络钓鱼等活动。</li>
</ul>
</li>
</ul>

            </section>
        

    </section>
    



    
    <section>
        <section >
            <h1>3. 直接信息收集</h1>

            </section>
        
            <section >
                <h2>3.1. 扫描技术</h2>
<ul>
<li>主机扫描
<ul>
<li>发现网络上的活动主机</li>
</ul>
</li>
<li>端口扫描
<ul>
<li>发现主机上的开放端口</li>
</ul>
</li>
<li>版本探测
<ul>
<li>探测端口上的运行服务</li>
</ul>
</li>
<li>漏洞探测
<ul>
<li>探测服务是否有相应漏洞</li>
</ul>
</li>
</ul>

            </section>
        
            <section >
                <blockquote>
<p>扫描是一个有趣的信息收集过程，它涉及对目标系统更深入的搜索，但是由于主动扫描涉及对目标系统直接访问，可能会被防火墙和入侵检测系统检测到。
扫描渗透测试请遵守当地法律法规，请勿直接扫描互联网设备。</p>
</blockquote>

            </section>
        
            <section >
                <h2>3.2. 主机扫描</h2>
<ul>
<li>MSF模块：modules/auxiliary/scanner/discovery
<ul>
<li>arp_sweep</li>
<li>ipv6_multicast_ping，ipv6_neighbor, ipv6_neighbor_router_advertisement</li>
<li>udp_probe，udp_sweep.</li>
</ul>
</li>
</ul>

            </section>
        
            <section >
                <ul>
<li>例：arp_sweep
<ul>
<li>原理：通过ARP请求可以枚举本地网络中的存活主机</li>
<li>适用：攻击者和目标机器处于同一个局域网时</li>
<li>模块：auxiliary/scanner/discovery/arp_sweep</li>
<li>结果：如果启动了数据库，结果将存储在Metasploit数据库中，可以使用hosts显示已经发现的主机。</li>
</ul>
</li>
</ul>

            </section>
        
            <section >
                <h2>3.3. 端口扫描</h2>
<p>可以通过search portscan 命令查看MSF中的端口扫描模块。</p>
<ul>
<li>TCP 端口扫描
<ul>
<li>MSF模块：auxiliary/scanner/portscan/tcp</li>
</ul>
</li>
<li>TCP SYN 扫描
<ul>
<li>MSF模块：auxiliary/scanner/portscan/syn</li>
<li>不会完成TCP三次握手
<ul>
<li>SYN扫描速度更快</li>
<li>躲避防火墙和入侵检测系统的检测。</li>
</ul>
</li>
</ul>
</li>
</ul>

            </section>
        
            <section >
                <h2>3.4. 版本探测</h2>
<ul>
<li>每个具体服务的版本探测都需要专用模块</li>
<li>被探测主机在运行相应服务</li>
</ul>

            </section>
        
            <section >
                <h3>3.4.1. SMB扫描和枚举</h3>
<ul>
<li>SMB协议
<ul>
<li>一种在 Microsoft Windows系统中使用网络文件共享的协议</li>
<li>已被证明是最容易被攻击的协议之一</li>
<li>它允许攻击者枚举目标文件和用户，甚至远程代码执行。</li>
</ul>
</li>
</ul>
<pre><code class="language-sh">
msf5 &gt; use auxiliary/scanner/smb/smb_
use auxiliary/scanner/smb/smb_enum_gpp
use auxiliary/scanner/smb/smb_enumshares
use auxiliary/scanner/smb/smb_enumusers
use auxiliary/scanner/smb/smb_enumusers_domain
use auxiliary/scanner/smb/smb_login
use auxiliary/scanner/smb/smb_lookupsid
use auxiliary/scanner/smb/smb_ms17_010
use auxiliary/scanner/smb/smb_uninit_cred
use auxiliary/scanner/smb/smb_version
msf5 &gt; use auxiliary/scanner/smb/smb_

</code></pre>

            </section>
        
            <section >
                <ul>
<li>smb版本探测</li>
</ul>
<p><img src="images/2019-04-19-09-21-53.png" alt=""></p>

            </section>
        
            <section >
                <ul>
<li>例：auxiliary/scanner/smb/smb_enumshares</li>
<li>功能：
<ul>
<li>无登陆凭据的SMB共享枚举模块，可以收集一些有价值的信息，比如共享名称，操作系统版本等</li>
<li>有凭据时，可以轻松的枚举共享和文件列表</li>
</ul>
</li>
</ul>
<pre><code class="language-sh">msf5 auxiliary(scanner/smb/smb_enumshares) &gt; set RHOST 192.168.20.180
RHOST =&gt; 192.168.20.180
msf5 auxiliary(scanner/smb/smb_enumshares) &gt; run

[-] 192.168.20.180:139    - Login Failed: Unable to Negotiate with remote host
[*] 192.168.20.180:       - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf5 auxiliary(scanner/smb/smb_enumshares) &gt; 

</code></pre>

            </section>
        
            <section >
                <p>-暴力破解</p>
<pre><code class="language-sh">
msf5 &gt; use auxiliary/scanner/smb/smb_login
msf5 auxiliary(scanner/smb/smb_login) &gt; set RHOSTS 192.168.177.144
RHOSTS =&gt; 192.168.177.144
msf5 auxiliary(scanner/smb/smb_login) &gt; set SMBUSER vagrant
SMBUSER =&gt; vagrant
msf5 auxiliary(scanner/smb/smb_login) &gt; set PASS_FILE /root/password.lst
PASS_FILE =&gt; /root/password.lst
msf5 auxiliary(scanner/smb/smb_login) &gt; run

[*] 192.168.177.144:445   - 192.168.177.144:445 - Starting SMB login bruteforce
[-] 192.168.177.144:445   - 192.168.177.144:445 - Failed: '.\vagrant:admin',
[-] 192.168.177.144:445   - 192.168.177.144:445 - Failed: '.\vagrant:admin123',
[+] 192.168.177.144:445   - 192.168.177.144:445 - Success: '.\vagrant:vagrant' Administrator
[*] 192.168.177.144:445   - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf5 auxiliary(scanner/smb/smb_login) &gt;

</code></pre>

            </section>
        
            <section >
                <h3>3.4.2. SSH 版本扫描和检测</h3>
<ul>
<li>SSH是一个广泛使用的远程登录程序。</li>
<li>思路：
<ul>
<li>通过SSH版本扫描模块，确定目标使用的SSH版本，</li>
<li>通过版本查找公开漏洞</li>
<li>利用漏洞进行攻击</li>
</ul>
</li>
<li>漏洞扫描软件亦使用如上原理</li>
<li>auxiliary/scanner/ssh</li>
</ul>

            </section>
        
            <section >
                <ul>
<li>版本探测</li>
</ul>
<pre><code class="language-sh">
msf5 &gt; use auxiliary/scanner/ssh/ssh_version
msf5 auxiliary(scanner/ssh/ssh_version) &gt; set RHOSTS 192.168.177.144
RHOSTS =&gt; 192.168.177.144
msf5 auxiliary(scanner/ssh/ssh_version) &gt; run

[+] 192.168.177.144:22    - SSH server version: SSH-2.0-OpenSSH_7.1 ( service.version=7.1 service.vendor=OpenBSD service.family=OpenSSH service.product=OpenSSH service.cpe23=cpe:/a:openbsd:openssh:7.1 service.protocol=ssh fingerprint_db=ssh.banner )
[*] 192.168.177.144:22    - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf5 auxiliary(scanner/ssh/ssh_version) &gt;

</code></pre>

            </section>
        
            <section >
                <p>– 可以使用SSH登录测试模块</p>
<pre><code>
msf5 &gt; use auxiliary/scanner/ssh/ssh_login
msf5 auxiliary(scanner/ssh/ssh_login) &gt; set RHOSTS 192.168.177.144
RHOSTS =&gt; 192.168.177.144
msf5 auxiliary(scanner/ssh/ssh_login) &gt; set USERNAME user
USERNAME =&gt; user
msf5 auxiliary(scanner/ssh/ssh_login) &gt; set PASS_FILE /root/password.lst
PASS_FILE =&gt; /root/password.lst
msf5 auxiliary(scanner/ssh/ssh_login) &gt; run

[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

</code></pre>

            </section>
        
            <section >
                <h3>3.4.3. FTP版本扫描</h3>
<pre><code class="language-sh">
msf5 &gt; use auxiliary/scanner/ftp/
use auxiliary/scanner/ftp/anonymous
use auxiliary/scanner/ftp/bison_ftp_traversal
use auxiliary/scanner/ftp/colorado_ftp_traversal
use auxiliary/scanner/ftp/easy_file_sharing_ftp
use auxiliary/scanner/ftp/ftp_login
use auxiliary/scanner/ftp/ftp_version
use auxiliary/scanner/ftp/konica_ftp_traversal
use auxiliary/scanner/ftp/pcman_ftp_traversal
use auxiliary/scanner/ftp/titanftp_xcrc_traversal

</code></pre>

            </section>
        
            <section >
                <h3>3.4.4. SMTP枚举</h3>
<ul>
<li>SMTP枚举用户的内部命令：
<ul>
<li>VRFY 确认有效用户名</li>
<li>EXPN显示用户的实际地址，别名和邮件列表</li>
</ul>
</li>
</ul>
<pre><code class="language-sh">
msf5 &gt; use auxiliary/scanner/smtp/smtp_
use auxiliary/scanner/smtp/smtp_enum
use auxiliary/scanner/smtp/smtp_ntlm_domain
use auxiliary/scanner/smtp/smtp_relay
use auxiliary/scanner/smtp/smtp_version

</code></pre>

            </section>
        
            <section >
                <h3>3.4.5. SNMP枚举</h3>
<ul>
<li>SNMP(简单网络管理协议)
<ul>
<li>用于管理网络设备的协议，</li>
<li>比如监控设备的状态信息，接口信息，网络接口的数据吞吐量等。</li>
<li>通过SNMP扫描器可以找到特定系统的大量信息。</li>
</ul>
</li>
</ul>
<blockquote>
<p>如果目标系统为Windows且配置了SNMP（通常是RO/RW团体字符串），我们可以提取系统重启时间，系统上的用户名，系统网络信息，运行的服务等各种有价值的信息。</p>
</blockquote>
<pre><code class="language-sh">
msf5 &gt; use auxiliary/scanner/snmp/snmp_enum
msf5 auxiliary(scanner/snmp/snmp_enum) &gt; set RHOSTS 192.168.177.144
RHOSTS =&gt; 192.168.177.144
msf5 auxiliary(scanner/snmp/snmp_enum) &gt; run
[+] 192.168.177.144, Connected.
[*] System information:
Host IP                       : 192.168.177.144     
Hostname                      : metasploitable3     
Description                   : Hardware: Intel64 Family 6 Model 94 Stepping 3 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7601 Multiprocess
r Free) 
Contact                       : -                  
Location                      : -                   
Uptime snmp                   : 01:18:04.40         
Uptime system                 : 01:16:09.69         
System date                   : 2019-4-12 16:44:05.7
[*] User accounts:
[&quot;sshd&quot;] 
[&quot;Guest&quot;] 
[&quot;greedo&quot;] 
[&quot;vagrant&quot;] 
[&quot;han_solo&quot;]
[&quot;kylo_ren&quot;]
[&quot;boba_fett&quot;]
[&quot;chewbacca&quot;]
[&quot;ben_kenobi&quot;]                                                                                     ..... 
[*] Network information:                            
IP forwarding enabled         : no                   
Default TTL                   : 128                
TCP segments received         : 70121              
TCP segments sent             : 70024               
TCP segments retrans          : 23                   
Input datagrams               : 634                
Delivered datagrams           : 825   
....
[*] Network interfaces:

Interface                     : [ up ] Software Loopback Interface 1
Id                            : 1
Mac Address                   : :::::
....

</code></pre>

            </section>
        
            <section >
                <h3>3.4.6. HTTP扫描</h3>
<pre><code class="language-sh">
msf5 &gt; use auxiliary/scanner/http/
Display all 242 possibilities? (y or n)

</code></pre>

            </section>
        
            <section >
                <h3>3.4.7. 版本探测模块小结</h3>
<ul>
<li>每个具体的服务都有相应的版本探测和服务枚举模块</li>
<li>MSF现支持的模块有如下这些</li>
</ul>
<pre><code class="language-sh">
root@wl:/usr/share/metasploit-framework/modules/auxiliary/scanner# ls
acpp           emc      kademlia   mysql       portmap    sip        udp
afp            etcd     llmnr      natpmp      portscan   smb        upnp
backdoor       finger   lotus      nessus      postgres   smtp       varnish
chargen        ftp      mdns       netbios     printer    snmp       vmware
couchdb        gopher   memcached  nexpose     quake      ssh        vnc
db2            h323     misc       nfs         rdp        ssl        voice
dcerpc         http     mongodb    nntp        redis      steam      vxworks
dect           ike      motorola   ntp         rogue      telephony  winrm
discovery      imap     mqtt       openvas     rservices  telnet     wproxy
dlsw           ip       msf        oracle      rsync      teradata   wsdd
dns            ipmi     msmail     pcanywhere  sap        tftp       x11
elasticsearch  jenkins  mssql      pop3        scada      ubiquiti


</code></pre>

            </section>
        

    </section>
    



    
    <section>
        <section >
            <h1>4. NMAP</h1>
<ul>
<li>NMap，也就是Network Mapper，最早是Linux下的网络扫描和嗅探工具包。
<ul>
<li>nmap是一个网络连接端扫描软件
<ul>
<li>主机发现（Host Discovery）；</li>
<li>端口扫描（Port Scanning）；</li>
<li>版本侦测（Version Detection）；</li>
<li>操作系统侦测（Operating System Detection）。</li>
</ul>
</li>
<li>另外Nmap提供强大的NSE（Nmap Scripting Language）脚本引擎功能，脚本可以对基本功能进行补充和扩展。</li>
</ul>
</li>
</ul>

            </section>
        
            <section >
                <ul>
<li>功能架构图</li>
</ul>
<p><img src="http://images2015.cnblogs.com/blog/744507/201609/744507-20160901205109590-1838442571.png" alt=""></p>

            </section>
        
            <section >
                <h2>4.1. 基本用法</h2>
<p>nmap一般会把主机发现、端口扫描、版本探测整合运行。</p>

            </section>
        
            <section >
                <h3>基本信息扫描</h3>
<p>命令形式:
nmap targethosts</p>

            </section>
        
            <section >
                <h2>对主机全面扫描</h2>
<ul>
<li>功能：nmap对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认NSE脚本扫描。</li>
<li>命令形式：
<ul>
<li>nmap –T4 –A –v targethost
<ul>
<li>其中-A选项用于使用进攻性（Aggressive）方式扫描；</li>
<li>总有6个级别（0-5），级别越高，扫描速度越快，但也容易被防火墙或IDS检测并屏蔽掉</li>
<li>v表示显示冗余（verbosity）信息</li>
</ul>
</li>
</ul>
</li>
</ul>

            </section>
        
            <section >
                <h2>4.2. 主机发现（Host Discovery）原理</h2>

            </section>
        
            <section >
                <p>1.默认情况下，Nmap会发送四种不同类型的数据包来探测目标主机是否在线。</p>
<pre><code>1.  ICMP echo request
2.  a TCP SYN packet to port 443
3.  a TCP ACK packet to port 80
4.  an ICMP timestamp request
</code></pre>
<p>依次发送四个报文探测目标机是否开启。只要收到其中一个包的回复，那就证明目标机开启。使用四种不同类型的数据包可以避免因防火墙或丢包造成的判断错误。</p>

            </section>
        
            <section >
                <p>2.通常主机发现并不单独使用，而只是作为端口扫描、版本侦测、OS侦测先行步骤。而在某些特殊应用（例如确定大型局域网内活动主机的数量），可能会单独专门适用主机发现功能来完成。
不管是作为辅助用法还是专门用途，用户都可以使用Nmap提供的丰富的选项来定制主机发现的探测方式。</p>
<pre><code>-sL: List Scan 列表扫描，仅将指定的目标的IP列举出来，不进行主机发现。  
-sn: Ping Scan 只进行主机发现，不进行端口扫描。  
-Pn: 将所有指定的主机视作开启的，跳过主机发现的过程。  
-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。  
-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用IP协议包探测对方主机是否开启。  
-n/-R: -n表示不进行DNS解析；-R表示总是进行DNS解析。  
--dns-servers &lt;serv1[,serv2],...&gt;: 指定DNS服务器。  
--system-dns: 指定使用系统的DNS服务器     
--traceroute: 追踪每个路由节点  
</code></pre>
<p>其中，比较常用的使用的是-sn，表示只单独进行主机发现过程；
-Pn表示直接跳过主机发现而进行端口扫描等高级操作（如果已经确知目标主机已经开启，可用该选项）；
-n，如果不想使用DNS或reverse DNS解析，那么可以使用该选项。</p>

            </section>
        
            <section >
                <p>3.例子
（1）<a href="http://xn--scanme-v98lg25d.nmap.org">探测scanme.nmap.org</a>
<a href="http://xn--scanme-hp7i81dg43gugum09h.nmap.org">下面以探测scanme.nmap.org</a> 的主机为例，简单演示主机发现的用法。
命令如下：</p>
<pre><code>nmap –sn –PE –PS80,135 –PU53 scanme.nmap.org
</code></pre>
<p>（2）探测局域网内活动主机
扫描局域网192.168.1.100-192.168.1.120范围内哪些IP的主机是活动的。
命令如下：</p>
<pre><code>nmap –sn 192.168.1.100-120
</code></pre>

            </section>
        
            <section >
                <h2>4.3. 端口扫描（Port Scanning）</h2>
<p>1.端口扫描是Nmap最基本最核心的功能，用于确定目标主机的TCP/UDP端口的开放情况。</p>
<p>2.默认情况下，Nmap会扫描1000个最有可能开放的TCP端口。</p>

            </section>
        
            <section >
                <p>3.Nmap通过探测将端口划分为6个状态：</p>
<pre><code>open：端口是开放的。
closed：端口是关闭的。
filtered：端口被防火墙IDS/IPS屏蔽，无法确定其状态。
unfiltered：端口没有被屏蔽，但是否开放需要进一步确定。
open|filtered：端口是开放的或被屏蔽。
closed|filtered ：端口是关闭的或被屏蔽。
</code></pre>
<blockquote>
<p>Open：端口处于开放状态，例如：当nmap使用TCP SYN对目标主机某一范围的端口进行扫描时，我们知道 TCP SYN报文是TCP建立连接的第一步，所以，如果目标主机返回SYN+ACK的报文，我们就认为此端口开放了并且使用了TCP服务。</p>
</blockquote>
<blockquote>
<p>Closed：端口处于关闭状态。例如：TCP SYN类型的扫描，如果返回RST类型的报文，则端口处于管理状态。这里我们值得注意的是关闭的端口也是可访问的，只是没有上层的服务在监听这个端口，而且，只是在我们扫描的这个时刻为关闭，当我们在另一个时间段进行扫描的时候，这些关闭的端口可能会处于open的状态。</p>
</blockquote>
<blockquote>
<p>Filtered（过滤的）：由于报文无法到达指定的端口，nmap不能够决定端口的开放状态，这主要是由于网络或者主机安装了一些防火墙所导致的。当nmap收到icmp报文主机不可达报文（例如：type为3，code为13（communication administratively prohibit）报文）或者目标主机无应答，常常会将目标主机的状态设置为filtered。</p>
</blockquote>
<blockquote>
<p>Unfiltered（未被过滤的），当nmap不能确定端口是否开放的时候所打上的状态，这种状态和filtered的区别在于：unfiltered的端口能被nmap访问，但是nmap根据返回的报文无法确定端口的开放状态，而filtered的端口直接就没就没能够被nmap访问。端口被定义为Unfilterd只会发生在TCP ack扫描类型时当返回RST的报文。而端口被定义为filtered 状态的原因是是报文被防火墙设备，路由器规则，或者防火墙软件拦截，无法送达到端口，这通常表现为发送NMAP的主机收到ICMP报错报文，如：TYPE为3，code为13的报文（通信被认为的禁止 communication administratively prohibited），或者主机通过多次重复发送没有收到任何回应）。</p>
</blockquote>
<blockquote>
<p>Open|filtered状态，这种状态主要是nmap无法区别端口处于open状态还是filtered状态。这种状态只会出现在open端口对报文不做回应的扫描类型中，如：udp，ip protocol ，TCP null，fin，和xmas扫描类型。</p>
</blockquote>
<blockquote>
<p>Closed|filtered状态，这种状态主要出现在nmap无法区分端口处于closed还是filtered时。此状态只会出现在IP ID idle scan（这个类型我现在也不太理解，过段时间进行总结一些）中。</p>
</blockquote>

            </section>
        
            <section >
                <p>4.用法</p>
<p>端口扫描用法比较简单，Nmap提供丰富的命令行参数来指定扫描方式和扫描端口。
具体可以参见如下描述。</p>
<p>（1）扫描方式选项</p>
<pre><code>-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。  
  
  -sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。  
  
  -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。  
  
  --scanflags &lt;flags&gt;: 定制TCP包的flags。  
  
  -sI &lt;zombiehost[:probeport]&gt;: 指定使用idle scan方式来扫描目标主机（前提需要找到合适的zombie host）  
  
  -sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。  
  
  -sO: 使用IP protocol 扫描确定目标机支持的协议类型。  
  
  -b &lt;FTP relay host&gt;: 使用FTP bounce scan扫描方式  
</code></pre>

            </section>
        
            <section >
                <p>（2）端口参数与扫描顺序</p>
<pre><code>-p &lt;port ranges&gt;: 扫描指定的端口  
  
实例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9（其中T代表TCP协议、U代表UDP协议、S代表SCTP协议）  
  
-F: Fast mode – 快速模式，仅扫描TOP 100的端口  
  
-r: 不进行端口随机打乱的操作（如无该参数，nmap会将要扫描的端口以随机顺序方式扫描，以让nmap的扫描不易被对方防火墙检测到）。  
  
--top-ports &lt;number&gt;:扫描开放概率最高的number个端口（nmap的作者曾经做过大规模地互联网扫描，以此统计出网络上各种端口可能开放的概率。以此排列出最有可能开放端口的列表，具体可以参见文件：nmap-services。默认情况下，nmap会扫描最有可能的1000个TCP端口）  
  
--port-ratio &lt;ratio&gt;: 扫描指定频率以上的端口。与上述--top-ports类似，这里以概率作为参数，让概率大于--port-ratio的端口才被扫描。显然参数必须在在0到1之间，具体范围概率情况可以查看nmap-services文件。  
</code></pre>
<p>–</p>
<p>5.例子</p>
<p>这里，我们以扫描局域网内192.168.1.100主机为例。</p>
<p>命令如下：
nmap –sS –sU –T4 –top-ports 300 192.168.1.100</p>
<p>参数-sS表示使用TCP SYN方式扫描TCP端口；-sU表示扫描UDP端口；-T4表示时间级别配置4级；–top-ports 300表示扫描最有可能开放的300个端口（TCP和UDP分别有300个端口）。</p>

            </section>
        
            <section >
                <h2>4.4. 版本侦测（Version Detection）</h2>
<p>1.版本侦测，用于确定目标主机开放端口上运行的具体的应用程序及版本信息。</p>

            </section>
        
            <section >
                <p>2.版本侦测主要分为以下几个步骤：</p>
<pre><code>（1）首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表，将该端口剔除。
（2）如果是TCP端口，尝试建立TCP连接。尝试等待片刻（通常6秒或更多，具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms）。通常在等待时间内，会接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。
（3）如果通过“Welcome Banner”无法确定应用程序版本，那么nmap再尝试发送其他的探测包（即从nmap-services-probes中挑选合适的probe），将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用，那么打印出应用返回报文，让用户自行进一步判定。
（4）如果是UDP端口，那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
（5）如果探测到应用程序是SSL，那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
（6）如果探测到应用程序是SunRPC，那么调用brute-force RPC grinder进一步探测具体服务
</code></pre>

            </section>
        
            <section >
                <p>3.版本侦测的用法</p>
<pre><code>-sV: 指定让Nmap进行版本侦测  
  
--version-intensity &lt;level&gt;: 指定版本侦测强度（0-9），默认为7。数值越高，探测出的服务越准确，但是运行时间会比较长。  
  
--version-light: 指定使用轻量侦测方式 (intensity 2)  
  
--version-all: 尝试使用所有的probes进行侦测 (intensity 9)  
  
--version-trace: 显示出详细的版本侦测过程信息。  
</code></pre>

            </section>
        
            <section >
                <p>4.例子</p>
<p>命令：
nmap –sV 192.168.1.100</p>
<p>对主机192.168.1.100进行版本侦测。</p>

            </section>
        

    </section>
    



    
    <section>
        <section >
            <h2>4.5. 操作系统侦测（Operating System Detection）</h2>
<p>1.操作系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。</p>
<p>2.Nmap拥有丰富的系统数据库nmap-os-db，目前可以识别2600多种操作系统与设备类型。</p>

            </section>
        
            <section >
                <p>3.OS侦测用法</p>
<pre><code>-O: 指定Nmap进行OS侦测。  
  
--osscan-limit: 限制Nmap只对确定的主机的进行OS探测（至少需确知该主机分别有一个open和closed的端口）。  
  
--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少，但会尽可能多为用户提供潜在的操作系统。  
</code></pre>

            </section>
        
            <section >
                <p>4.例子</p>
<p>命令：
nmap –O 192.168.1.100</p>
<blockquote>
<p>db_nmap 方式
db_nmap命令是msfconsole中的一部分，所以只需要启动msfconsole并使用就好了。参数就和在命令行中单独使用nmap一样。</p>
</blockquote>

            </section>
        

    </section>
    



    
        <section >
            
            <h1>漏洞扫描与OpenVAS</h1>

            </section>
    



    
        <section >
            
            <h1>隐私保护</h1>
<ul>
<li>哪些信息是不得不公开的
<ul>
<li>硬币的两个面</li>
</ul>
</li>
<li>哪些信息是可以选择不公开的
<ul>
<li>在</li>
</ul>
</li>
<li>谁在过度搜集信息又保护不足</li>
<li>谁在窃取信息并从中牟利</li>
</ul>

            </section>
    


    </div>


  </div>

  	
	<script src="libs/reveal.js/4.1.3/reveal.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/zoom/zoom.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/notes/notes.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/search/search.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/markdown/markdown.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/highlight/highlight.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/menu/menu.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/math/math.js"></script>

	<script src="libs/reveal.js/4.1.3/plugin/fullscreen/plugin.js"></script>
  
  	<script src="libs/reveal.js/4.1.3/plugin/animate/plugin.js"></script>
  	<script src="libs/reveal.js/4.1.3/plugin/animate/svg.min.js"></script>
  
  	<script src="libs/reveal.js/4.1.3/plugin/anything/plugin.js"></script>
	  <script src="libs/reveal.js/4.1.3/plugin/anything/Chart.min.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/anything/d3/d3.v3.min.js"></script>				
	<script src="libs/reveal.js/4.1.3/plugin/anything/d3.patch.js"></script>			
	<script src="libs/reveal.js/4.1.3/plugin/anything/d3/queue.v1.min.js"></script>		
	<script src="libs/reveal.js/4.1.3/plugin/anything/d3/topojson.v1.min.js"></script>		
	<script src="libs/reveal.js/4.1.3/plugin/anything/function-plot.js"></script>

 <!--	<script src="libs/reveal.js/4.1.3/plugin/audio-slideshow/plugin.js"></script>  -->
<!--	<script src="libs/reveal.js/4.1.3/plugin/audio-slideshow/recorder.js"></script>-->
<!--	<script src="libs/reveal.js/4.1.3/plugin/audio-slideshow/RecordRTC.js"></script>-->

<script src="libs/reveal.js/4.1.3/plugin/chalkboard/plugin.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/customcontrols/plugin.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/embed-tweet/plugin.js"></script>

	<script src="libs/reveal.js/4.1.3/plugin/chart/chart.min.js"></script>
	<script src="libs/reveal.js/4.1.3/plugin/chart/plugin.js"></script>

  <script>

		const printPlugins = [
			RevealNotes, 
			RevealHighlight,
			RevealMath,
			RevealAnimate,
			RevealChalkboard, 
			RevealEmbedTweet,
			RevealChart,
		];

		const plugins =  [...printPlugins,
		RevealZoom, 
		RevealSearch, 
				RevealMarkdown, 
				RevealMenu, 
				RevealFullscreen,
				RevealAnything,
				//RevealAudioSlideshow,
				//RevealAudioRecorder,
				RevealCustomControls, 
				// poll
				// question
				// seminar
				 ]


		// Also available as an ES module, see:
		// https://revealjs.com/initialization/
		Reveal.initialize({
			controls: true,
			controlsTutorial: true,
			controlsLayout: 'bottom-right',
			controlsBackArrows: 'faded',
			progress: true,
			slideNumber: false,
			//#showSlideNumber "all" "print" "speaker"
			hash: true,//#  hash: false,
			//# respondToHashChanges: true,
			//# history: false,
			keyboard: true,
			//#keyboardCondition: null,
			overview: true,
			center: true,
			touch: true,
			loop: false,
			rtl: false,
			//#navigationMode: 'default', linear grid
			shuffle: false,
			fragments: true,
			fragmentInURL: false,
			embedded: false,
			help: true,
			//#pause: true
			showNotes: false,
			autoPlayMedia: false, // TODO fix this to a nullable value
			//#preloadIframes: null. true false
			//#autoAnimate: true
			//#autoAnimateMatcher: null,
			//#autoAnimateEasing: 'ease',
			//autoAnimateDuration: 1.0,
			//#autoAnimateUnmatched: true
			//#autoAnimateStyles: []
			autoSlide: 0, // TODO fix this to a falseable value
			autoSlideStoppable: true,
			autoSlideMethod: '0',
			defaultTiming: 120,
			mouseWheel: false,
			//#previewLinks: false
			//#postMessage: true,  // TODO : this can cause issues with the vscode api ???
			//#postMessageEvents: false,
			//#focusBodyOnPageVisibilityChange: true,
			transition: 'slide',
			transitionSpeed: 'default',
			backgroundTransition: 'fade',
			//#pdfMaxPagesPerSlide: Number.POSITIVE_INFINITY,
			//#pdfSeparateFragments: true,
			//#pdfPageHeightOffset: -1,
			viewDistance: 3,
			//#mobileViewDistance: 2,
			display: 'block',
			//#hideInactiveCursor: true,
			//#hideCursorTime: 5000

			// Parallax Background
			parallaxBackgroundImage: '',
			parallaxBackgroundSize: '',
			parallaxBackgroundHorizontal: 0,
			parallaxBackgroundVertical: 0,
			
			//Presentation Size
			width: 960,
			height: 700,
			margin: 0.04,
			minScale: 0.2,
			maxScale: 2,
			disableLayout: false,

			audio: {
				prefix: 'audio/', 	// audio files are stored in the "audio" folder
				suffix: '.ogg',		// audio files have the ".ogg" ending
				textToSpeechURL: null,  // the URL to the text to speech converter
				defaultNotes: false, 	// use slide notes as default for the text to speech converter
				defaultText: false, 	// use slide text as default for the text to speech converter
				advance: 0, 		// advance to next slide after given time in milliseconds after audio has played, use negative value to not advance
				autoplay: false,	// automatically start slideshow
				defaultDuration: 5,	// default duration in seconds if no audio is available
				defaultAudios: true,	// try to play audios with names such as audio/1.2.ogg
				playerOpacity: 0.05,	// opacity value of audio player if unfocused
				playerStyle: 'position: fixed; bottom: 4px; left: 25%; width: 50%; height:75px; z-index: 33;', // style used for container of audio controls
				startAtFragment: false, // when moving to a slide, start at the current fragment or at the start of the slide
			},
			
			chalkboard: { // font-awesome.min.css must be available
					//src: "chalkboard/chalkboard.json",
					storage: "chalkboard-demo",
				},
			
			customcontrols: {
					controls: [
      						{
						  id: 'toggle-overview',
						  title: 'Toggle overview (O)',
						  icon: '<i class="fa fa-th"></i>',
						  action: 'Reveal.toggleOverview();'
						}
						,
						{ icon: '<i class="fa fa-pen-square"></i>',
						  title: 'Toggle chalkboard (B)',
						  action: 'RevealChalkboard.toggleChalkboard();'
						},
						{ icon: '<i class="fa fa-pen"></i>',
						  title: 'Toggle notes canvas (C)',
						  action: 'RevealChalkboard.toggleNotesCanvas();'
						}
				]
			},
			chart: {
					defaults: { 
						color: 'lightgray', // color of labels
						scale: { 
							beginAtZero: true, 
							ticks: { stepSize: 1 },
							grid: { color: "lightgray" } , // color of grid lines
						},
					},
					line: { borderColor: [ "rgba(20,220,220,.8)" , "rgba(220,120,120,.8)", "rgba(20,120,220,.8)" ], "borderDash": [ [5,10], [0,0] ] }, 
					bar: { backgroundColor: [ "rgba(20,220,220,.8)" , "rgba(220,120,120,.8)", "rgba(20,120,220,.8)" ]}, 
					pie: { backgroundColor: [ ["rgba(0,0,0,.8)" , "rgba(220,20,20,.8)", "rgba(20,220,20,.8)", "rgba(220,220,20,.8)", "rgba(20,20,220,.8)"] ]},
					radar: { borderColor: [ "rgba(20,220,220,.8)" , "rgba(220,120,120,.8)", "rgba(20,120,220,.8)" ]}, 
			},
			math: {
				mathjax: 'https://cdn.jsdelivr.net/gh/mathjax/mathjax@2.7.8/MathJax.js',
				config: 'TeX-AMS_HTML-full',
				// pass other options into `MathJax.Hub.Config()`
				TeX: { Macros: { RR: "{\\bf R}" } }
				},
				anything: [ 
				{
		className: "plot",
		defaults: {width:500, height: 500, grid:true},
		initialize: (function(container, options){ options.target = "#"+container.id; functionPlot(options) })
	 },
	 {
		className: "chart",  
		initialize: (function(container, options){ container.chart = new Chart(container.getContext("2d"), options);  })
	 },
	 {
		className: "anything",
		initialize: (function(container, options){ if (options && options.initialize) { options.initialize(container)} })
	 },
					],
			// Learn about plugins: https://revealjs.com/plugins/
			plugins: (window.location.search.match(/print-pdf/gi) ? printPlugins : plugins ) 
		});
			


	    // Change chalkboard theme : 
		function changeTheme(input) {
			var config = {};
			config.theme = input.value;
			Reveal.getPlugin("RevealChalkboard").configure(config);
			input.blur();
		}

		// // Handle the message inside the webview
        // window.addEventListener('message', event => {

        //     const message = event.data; // The JSON data our extension sent

        //     switch (message.command) {
        //         case 'refactor':
        //             Reveal.toggleHelp();
        //     }
        // });

		if (window.location.search.match(/print-pdf-now/gi)) {
      		setTimeout(() => {
				window.print();
			  }, 2500);
			
    }
		

	</script>

</body>

</html>